/* 文章分类管理路由处理函数 */
// 导入数据库操作模块
const { result } = require("@hapi/joi/lib/base");
const db = require("../db/index");

/* 
  1、获取文章分类列表
   - 定义sql语句 获取没有被标记删除的所有数据
   - 执行sql语句
   - 响应结果
*/
exports.getArticleCates = (req, res) => {
  // 定义sql语句 获取没有被标记删除的所有数据
  const sql = `select * from ev_article_cate where is_delete=0 order by id asc`;
  // 执行sql语句
  db.query(sql, function (err, results) {
    if (err) return res.cc(err);
    // 执行sql语句成功
    res.send({
      status: 0,
      message: "获取文章分类列表成功！",
      data: results,
    });
  });
};
/* 
  2、新增文章分类
   - 验证表单数据 分类名-字符串必需 分类别名-字母和数字的组合必需
   - 判断分类名(name)和分类别名(alias)是否被占用
   - 添加文章分类
   - 响应成功信息
*/
exports.addArticleCates = (req, res) => {
  // 定义验证分类名和分类别名是否被占用sql语句
  const sql = `select * from ev_article_cate where name=? or alias=?`;
  db.query(sql, [req.body.name, req.body.alias], (err, result) => {
    // 执行sql语句失败
    if (err) return res.cc(err);
    console.log(result);
    // 都被占用
    if (result.length === 2)
      return res.cc("分类名与别名被占用，请更换后重试！");
    if (
      result.length === 1 &&
      result[0].alias === req.body.alias &&
      result[0].name === req.body.name
    )
      return res.cc("分类名与别名被占用，请更换后重试！");
    // 只有一个被占用，分别判断后提示
    if (result.length === 1 && result[0].name === req.body.name)
      return res.cc("分类名被占用，请更换后重试！");
    if (result.length === 1 && result[0].alias === req.body.alias)
      return res.cc("分类别名被占用，请更换后重试！");
  });
  // 添加文章分类
  const addcateSql = `insert into ev_article_cate set ? `;
  db.query(addcateSql, req.body, (err, result) => {
    // 执行sql语句失败
    if (err) return res.cc(err);
    // 执行成功但影响条数不为1
    if (result.affectedRows !== 1) return res.cc("新增文章分类失败！");
    // 执行成功
    res.cc("新增文章分类成功！", 0);
  });
};

/* 
  3、根据id删除文章分类
   - 验证传过来的id是否符合标准 定义校验规则对象
   - 定义sql语句 根据id修改标记删除字段
   - 执行sql语句
*/
exports.deleteCateById = (req, res) => {
  const sql = `update ev_article_cate set is_delete=1 where id=?`;
  db.query(sql, req.params.id, (err, result) => {
    if (err) return res.cc(err);
    // SQL 语句执行成功，但是影响行数不等于 1
    if (result.affectedRows !== 1) return res.cc("删除文章分类失败！");
    // 删除文章分类成功
    res.cc("删除文章分类成功！", 0);
  });
};
/* 
  4、根据id获取文章分类
   - 验证传过来的id是否符合标准，定义校验规则对象，配置局部中间件
   - 定义查询sql语句
   - 执行sql语句返回结果
*/
exports.getArticleById = (req, res) => {
  const sql = `select * from ev_article_cate where id=?`;
  db.query(sql, req.params.id, (err, result) => {
    if (err) return res.cc(err);
    if (result.length !== 1) return res.cc("获取文章分类失败");
    res.cc(result[0], 0);
  });
};
/* 
  5、根据id更新文章分类
  - 验证表单数据 id name alias 
  - 定义更新sql语句
  - 执行 响应
*/
exports.updateCateById = (req, res) => {
  const sql = `update ev_article_cate set ? where id=?`;
  db.query(sql, [req.body, req.body.Id], (err, result) => {
    if (err) return res.cc(err);
    if (result.affectedRows !== 1) return res.cc("更新文章分类失败！");
    return res.cc("更新文章分类成功！", 0);
  });
};
